﻿================Класс Connection================Класс `Connection` - "рабочая лошадка". Он осуществляет связь с сервером и всю необходимую перепаковку данных из клиентского представления в сетевое.Экземпляр клиента создается конструктором:.. code-block:: php    $connection = new Irbis\Connection();При создании клиента можно указать (некоторые) настройки:.. code-block:: php    $client = new Irbis\Connection();    $client->host = 'irbis.rsl.ru';    $client->port = 5555;    $client->username = 'ninja';    $client->password = 'i_am_invisible';============ ========= ============================= ======================Поле          Тип       Назначение                    Значение по умолчанию============ ========= ============================= ======================host          string    Адрес сервера                 '127.0.0.1'port          integer   Порт                          6666username      string    Имя (логин) пользователя      пустая строкаpassword      string    Пароль пользователя           пустая строкаdatabase      string    Имя базы данных               'IBIS'workstation   string    Тип АРМа (см. таблицу ниже)   'C'============ ========= ============================= ======================Типы АРМов============ =====================Обозначение   Тип============ ====================='R'           Читатель'C'           Каталогизатор'M'           Комплектатор'B'           Книговыдача'K'           Книгообеспеченность'A'           Администратор============ =====================Можно использовать мнемонические константы, определённые в `PhpIrbis`:.. code-block:: php    const ADMINISTRATOR = 'A'; // Адмнистратор    const CATALOGER     = 'C'; // Каталогизатор    const ACQUSITIONS   = 'M'; // Комплектатор    const READER        = 'R'; // Читатель    const CIRCULATION   = 'B'; // Книговыдача    const BOOKLAND      = 'B'; // Книговыдача    const PROVISITON    = 'K'; // КнигообеспеченностьОбратите внимание, что адрес сервера задается строкой, так что может принимать как значения вроде ``192.168.1.1``, так и ``irbis.yourlib.com``.Если какой-либо из вышеперечисленных параметров не задан явно, используется значение по умолчанию.Подключение к серверу и отключение от него==========================================Только что созданный клиент еще не подключен к серверу. Подключаться необходимо явно с помощью метода ``connect``, при этом можно указать параметры подключения:.. code-block:: php    $client = new Irbis\Connection();    $client->host = 'myhost.com';    if (!$client->connect()) {        echo "Не удалось подключиться!";        die(1);    }Отключаться от сервера можно двумя способами: во-первых, с помощью метода ``disconnect``:.. code-block:: php    $client->disconnect();во-вторых, клиент автоматически отключается от сервера при уничтожении экземпляра класса:.. code-block:: php    unset($client); // Происходит неявный вызов disconnect()При подключении клиент получает с сервера INI-файл с настройками, которые могут понадобиться в процессе работы:.. code-block:: php    $client->connect();    // Получаем имя MNU-файла, хранящего перечень форматов    $formatMenuName = $client->iniFile->getValue('Main', 'FmtMnu', 'FMT31.MNU');Полученный с сервера INI-файл хранится в поле ``iniFile``.Повторная попытка подключения с помощью того же экземпляра ``Irbis\Connection`` игнорируется. При необходимости можно создать другой экземпляр и подключиться с его помощью (если позволяют клиентские лицензии). Аналогично игнорируются повторные попытки отключения от сервера.Проверить статус "клиент подключен или нет" можно с помощью метода ``isConnected``:.. code-block:: php    if (!$client->isConnected()) {        // В настоящее время мы не подключены к серверу    }Вместо индивидуального задания каждого из полей ``host``, ``port``, ``username``, ``password`` и ``database``, можно использовать метод ``parseConnectionString``:.. code-block:: php    $client->parseConnectionString('host=192.168.1.4;port=5555;' .             'username=itsme;password=secret;');    $client->connect();Многопоточность===============Клиент написан в наивном однопоточном стиле, поэтому не поддерживает одновременный вызов методов из разных потоков.Для одновременной отсылки на сервер нескольких команд необходимо создать соответствующее количество экземпляров подключений (если подобное позволяет лицензия сервера).Подтверждение подключения=========================``PhpIrbis`` самостоятельно не посылает на сервер подтверждений того, что клиент все еще подключен. Этим должно заниматься приложение, например, по таймеру.Подтверждение посылается серверу методом ``noOp``: .. code-block:: php    $client->noOp();Чтение записей с сервера========================.. code-block:: php    $mfn = 123;    $record = $client->readRecord($mfn);Можно прочитать несколько записей сразу:.. code-block:: php    $mfns = array(12, 34, 56);    $records = $client->readRecords($mfns);Можно прочитать определенную версию записи.. code-block:: php    $mfn = 123;    $version = 3;    $record = $client->readRecordVersion($mfn, $version);Сохранение записи на сервере============================.. code-block:: php    // Любым образом создаём или получаем с сервера запись.    $record = $client->readRecord(123);    // Производим какие-то манипуляции над записью    $record->add(999, '123');    // Отсылаем запись на сервер    $newMaxMfn = $client->writeRecord($record);    echo "New MaxMFN: $newMaxMfn";Сохранение нескольких записей (возможно, из разных баз данных):.. code-block:: php    $records = array();    ...    if (!$client->writeRecords($records))) {        echo "Failure!";    }Удаление записи на сервере==========================.. code-block:: php    $mfn = 123;    $client->deleteRecord($mfn);Восстановление записи:.. code-block:: php    $mfn = 123;    $record = $client->undeleteRecord($mfn);Поиск записей=============.. code-block:: php    $found = $client->search('"A=ПУШКИН$"');    echo "Найдено записей: " . count($found);Обратите внимание, что поисковый запрос заключен в дополнительные кавычки. Эти кавычки явлются элементом синтаксиса поисковых запросов ИРБИС64, и лучше их не опускать.Вышеприведённый запрос вернёт не более 32 тыс. найденных записей. Сервер ИРБИС64 за одно обращение к нему может выдать не более 32 тыс. записей. Чтобы получить все записи, используйте метод searchAll (см. ниже), он выполнит столько обращений к серверу, сколько нужно.Поиск с одновременной загрузкой записей:.. code-block:: php    $records = $client->searchRead('"A=ПУШКИН$"', 50);    echo "Найдено записей: " . count($records);Поиск и загрузка единственной записи:.. code-block:: php    $record = $client->searchSingleRecord('"I=65.304.13-772296"');    if (!$record) {        echo 'Не нашли!';    }Количество записей, соответствующих поисковому выражению:.. code-block:: php    $expression = '"A=ПУШКИН$"';    $count = $client->searchCount($expression);Расширенный поиск: можно задать не только количество возвращаемых записей, но и расформатировать их... code-block:: php    $parameters = new Irbis\SearchParameters();    $parameters->expression = '"A=ПУШКИН$"';    $parameters->format = BRIEF_FORMAT;    $parameters->numberOfRecords = 5;    $found = $client->searchEx($parameters);    if (!$found) {        echo 'Не нашли';    } else {        // в $found находится массив FoundLine        $first = $found[0];        echo "<p>MFN: {$first->mfn}, DESCRIPTION: {$first->description}</p>";    }Поиск всех записей (даже если их окажется больше 32 тыс.):.. code-block:: php    $found = $client->searchAll('"A=ПУШКИН$"');    echo "Найдено записей: " . count($found);Подобные запросы следует использовать с осторожностью, т. к. они, во-первых, создают повышенную нагрузку на сервер, и во-вторых, потребляют очень много памяти на клиенте. Некоторые запросы (например, "I=$") могут вернуть все записи в базе данных, а их там может быть десятки миллионов.Форматирование записей======================.. code-block:: php    $mfn = 123;    $format = BRIEF_FORMAT;    $text = $client->formatRecord($format, $mfn);    echo '<p>Результат форматирования: ' . $text . '</p>';При необходимости можно использовать в формате все символы UNICODE:.. code-block:: php    $mfn = 123;    $format = "'Ἀριστοτέλης: ', v200^a";    $text = $client->formatRecord($format, $mfn);    echo '<p>Результат форматирования: ' . $text . '</p>';Форматирование нескольких записей:.. code-block:: php    $mfns = array ( 12, 34, 56 );    $format = BRIEF_FORMAT;    $lines = $client->formatRecords($format, $mfns);    echo '<p>Результаты:<br/>' . implode('<br/>', $lines) . '</p>';Печать таблиц=============.. code-block:: php    $table = new Irbis\TableDefinition();    $table->database = 'IBIS';    $table->table = '@tabf1w';    $table->searchQuery = '"T=A$"';    $text = $client->printTable($table);Работа с контекстом===================Контекст в данном случае -- файлы обвязки, хранящиеся на сервере ИРБИС64 (форматы, меню и проч.).=================== =================================================Функция              Назначение=================== =================================================listFiles            Получение списка файлов на сервереreadIniFile          Получение INI-файла с сервераreadMenuFile         Получение MNU-файла с сервераreadSearchScenario   Загрузка сценариев поиска с сервераreadTextFile         Получение текстового файла с сервераreadTextLines        Получение текстового файла в виде массива строкreadTreeFile         Получение TRE-файла с сервераupdateIniFile        Обновление строк серверного INI-файлаwriteTextFile        Сохранение текстового файла на сервере=================== =================================================Работа с мастер-файлом===================================== ========================================Функция          Назначение=============== ========================================readRawRecord    Чтение указанной записи в "сыром" видеwriteRawRecord   Сохранение на сервере "сырой" записи=============== ========================================Работа со словарем==================================== ==================================================Функция             Назначение================== ==================================================getRecordPostings   Массив постингов для указанных MFN и префиксаlistTerms           Получение списка терминов с указанным префиксомreadPostings        Чтение постингов поискового словаряreadTerms           Чтение терминов поискового словаряreadTermsEx         Расширенное чтение терминов================== ==================================================Информационные функции========================================= ========================================================Функция              Назначение=================== ========================================================getDatabaseInfo      Получение информации о базе данныхgetMaxMfn            Получение максимального MFN для указанной базы данныхgetServerVersion     Получение версии сервераlistDatabases        Получение списка баз данных с сервераtoConnectionString   Получение строки подключения=================== ========================================================Администраторские функции=========================Нижеперечисленные записи доступны лишь из АРМ "Администратор", поэтому подключаться к серверу необходимо так:.. code-block:: php    $client = new Irbis\Connection();    $client->username = 'librarian';    $client->password = 'secret';    $client->workstation = ADMINISTRATOR;    if (!$client->connect()) {        echo 'Не удалось подключиться!';        die(1);    }================== ============================================Функция             Назначение================== ============================================actualizeDatabase   Актуализация базы данныхactualizeRecord     Актуализация записиcreateDatabase      Создание базы данныхcreateDictionary    Создание словаряdeleteDatabase      Удаление базы данныхdeleteFile          Удаление файла на сервереgetServerStat       Получение статистики с сервераgetUserList         Получение списка пользователей с сервераlistProcesses       Получение списка серверных процессовreloadDictionary    Пересоздание словаряreloadMasterFile    Пересоздание мастер-файлаrestartServer       Перезапуск сервераtruncateDatabase    Опустошение базы данныхunlockDatabase      Разблокирование базы данныхunlockRecords       Разблокирование записейupdateUserList      Обновление списка пользователей на сервере================== ============================================Расширение функциональности===========================**executeAnyCommand(string $command, array $params)** -- выполнение произвольной команды с параметрами в кодировке ANSI.